import tkinter as tk

# 创建Form
root = tk.Tk()
root.title("用户登录")
root.geometry("400x300")
root.maxsize(400, 300)


# 创建标签
label = tk.Label(root, text="标签控件", bg="pink", font=("华文楷体", 20), width=20, height=2)

# label 绑定鼠标进入事件
def label_enter(e):
    # 鼠标进入时，标签背景颜色改为绿色，字体颜色改为白色
    label.config(bg="green", fg="white")
    print("鼠标进入")
label.bind("<Enter>", label_enter)

# label 绑定鼠标离开事件
def label_leave(e):
    # 鼠标离开时，标签背景颜色改为粉色，字体颜色改为黑色
    label.config(bg="pink", fg="black")
    print("鼠标离开")
label.bind("<Leave>", label_leave)

# label 绑定鼠标左键单击事件
def label_click(e):
    # 鼠标左键单击时，标签背景颜色改为蓝色，字体颜色改为白色
    label.config(bg="blue", fg="white")
    label.config(font=("华文楷体", 30))
    print("鼠标左键单击")
label.bind("<Button-1>", label_click)
label.pack()


# 创建按钮
btn = tk.Button(root, text="切换状态", width=10, height=2)
btn.pack()

# 按钮绑定事件，切换可用和不可用
def changeState(event):
    if btn["state"] == tk.NORMAL:
        btn["state"] = tk.DISABLED
    else:
        btn["state"] = tk.NORMAL

btn.bind("<Button-1>", changeState)

# 创建一个输入框
text_var = tk.StringVar()
entry = tk.Entry(root, textvariable=text_var)
entry.pack()
# 监听entry输入框内容变化
def entry_change(e):
    print("输入框内容变化：", text_var.get())
entry.bind("<Key>", entry_change)

#entry 获取或失去焦点
def entry_focus_in(e):
    print("获取焦点")
entry.bind("<FocusIn>", entry_focus_in)

def entry_focus_out(e):
    print("失去焦点")
entry.bind("<FocusOut>", entry_focus_out)

# entry 回车事件
def entry_return(e):
    print("回车事件")
entry.bind("<Return>", entry_return)

# text_var 监听内容变化
# def text_var_change():
#     print("text_var 内容变化：", text_var.get())
# text_var.trace("w", text_var_change)


# 创建一个多行文本框
text = tk.Text(root, width=30, height=10)
text.pack()
# 插入文本
text.insert(tk.INSERT, "多行文本框")
# 结尾追加文本
text.insert(tk.END, "多行文本框")
# 绑定 keypress 事件
def text_keypress(e):
    print("text_keypress:", e.char)
    # 获取当前插入点位置
    print("当前插入点位置：", text.index(tk.INSERT))
    print("当前光标所在行：", text.index(tk.INSERT).split(".")[0])
    # # 获取当前光标所在列
    print("当前光标所在列：", text.index(tk.INSERT).split(".")[1])
    # # 获取当前光标所在行文本
    print("当前光标所在行文本：", text.get(text.index(tk.INSERT).split(".")[0]+".0", text.index(tk.INSERT).split(".")[0]+".end"))
text.bind("<KeyPress>", text_keypress)


# 运行窗体
root.mainloop()